﻿using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Description;

namespace RockBus.ServiceModel
{
    public class ConcreteClientBase<TContract> : ClientBase<TContract>
        where TContract : class
    {
        public ConcreteClientBase()
            : base()
        {
        }

        public ConcreteClientBase(ServiceEndpoint serviceEndpoint)
            : base(serviceEndpoint)
        {

        }

        public ConcreteClientBase(InstanceContext callbackInstance)
            : base(callbackInstance)
        {
        }

        public ConcreteClientBase(string endpointConfigurationName)
            : base(endpointConfigurationName)
        {
        }

        public ConcreteClientBase(Binding binding, EndpointAddress remoteAddress)
            : base(binding, remoteAddress)
        {
        }

        public ConcreteClientBase(InstanceContext callbackInstance, string endpointConfigurationName)
            : base(callbackInstance, endpointConfigurationName)
        {
        }

        public ConcreteClientBase(string endpointConfigurationName, EndpointAddress remoteAddress)
            : base(endpointConfigurationName, remoteAddress)
        {
        }

        public ConcreteClientBase(string endpointConfigurationName, string remoteAddress)
            : base(endpointConfigurationName, remoteAddress)
        {
        }

        public ConcreteClientBase(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress)
            : base(callbackInstance, binding, remoteAddress)
        {
        }

        public ConcreteClientBase(InstanceContext callbackInstance, string endpointConfigurationName, EndpointAddress remoteAddress)
            : base(callbackInstance, endpointConfigurationName, remoteAddress)
        {
        }

        public ConcreteClientBase(InstanceContext callbackInstance, string endpointConfigurationName, string remoteAddress)
            : base(callbackInstance, endpointConfigurationName, remoteAddress)
        {
        }

        public TContract Contract
        {
            get { return base.Channel; }
        }
    }
}